/**
 * @file    main.c 
 * @author  18408107475@163.com
 * @version V1.0.0
 * @date    2025-07-12
 * @brief   输入捕获模式测频率
 * @details 
 * 硬件配置：
 *   - 主控芯片：STM32F10x系列
 *   - 显示设备：OLED SSD1315（I2C接口）
 *   - PWM输出：PA1（TIM2_CH2）
 *   - 输入捕获：PA6（TIM3_CH1）
 *   - 硬件连接：建议将PA1（PWM输出）与PA6（输入捕获）用导线连接，形成闭环测试
 * 
 * 软件特性：
 *   - 生成可调频率的PWM信号
 *   - 通过输入捕获测量PWM频率并在OLED显示
 *   - 实时更新频率数据，刷新率取决于主循环执行速度
 */

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"              // STM32标准外设库（核心头文件）
#include "Delay.h"                  // 精确延时函数（基于SysTick）
#include "USART1_Config.h"          // USART1初始化及printf重定向（备用调试接口）
#include "OLED_SSD1315_Config.h"    // OLED SSD1315驱动（显示频率数据）
#include "PWM.H"                    // PWM输出控制（生成测试信号）
#include "INPUT_CAPTURE_Config.H"   // 输入捕获模块（测量频率）

/* 私有变量定义 --------------------------------------------------------------*/
// 无额外私有变量，直接通过函数接口获取数据


/**
 * @brief  主程序入口
 * @param  None
 * @retval int 程序状态码（实际不会返回）
 * @执行流程：
 *   1. 初始化外设：OLED显示屏、PWM模块、输入捕获模块
 *   2. 配置PWM参数：设置频率为100Hz，占空比50%
 *   3. 初始化OLED显示：清屏并显示固定文本
 *   4. 主循环：实时读取频率并更新OLED显示
 */
int main(void)
{
    OLED_SSD1315_Init();        // 初始化OLED显示屏（I2C通信，128x64分辨率）
    PWM_Config();               // 初始化PWM模块（默认配置TIM2_CH2，PA1输出）
    INPUT_CAPTURE_Config();     // 初始化输入捕获模块（TIM3_CH1，PA6输入）

    // 调整PWM频率：
    // 原预分频器默认值为35（20kHz），此处改为7200-1=7199
    // 计算公式：PWM频率 = 72MHz / [(7199+1) × 100] = 72000000/(7200×100) = 100Hz
    PWM_SetPrescaler(720-1);
    // 设置PWM占空比为50%（Compare=50，对应50/99≈50.5%）
    PWM_SetCompare2(50);

    OLED_SSD1315_Clear();       // 清屏，初始化显示界面
    // 在OLED第0行显示固定文本"Freq:000000HZ"，字体16x16
    OLED_SSD1315_ShowString(0,0, "Freq:000000HZ", 16, false); 

    while (1)                   // 无限循环，持续测量并显示频率
    {
        // 读取输入捕获的频率值，并显示在OLED第0行、第41列位置
        // 显示格式：6位数字，字体16x16，覆盖"000000"区域
        OLED_SSD1315_ShowNum(41,0,INPUT_CAPTURE_GetFreq(),6,16);
    }
}

/************************ (C) COPYRIGHT 2025 Embedded Team *****END OF FILE****/
